package com.example.app;

import org.apache.commons.cli.*;

import java.io.PrintStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Hello world 应用示例，用于验证Maven和Java环境
 */
public class App {
    public static void main(String[] args) {
        // 设置终端编码为UTF-8
        try {
            System.setOut(new PrintStream(System.out, true, "UTF-8"));
        } catch (java.io.UnsupportedEncodingException e) {
            System.err.println("UTF-8编码不支持，使用默认编码");
        }

        // 创建命令行选项
        Options options = new Options();
        
        Option nameOption = Option.builder("n")
                .longOpt("name")
                .hasArg()
                .desc("您的名字")
                .required(false)
                .build();
        
        Option helpOption = Option.builder("h")
                .longOpt("help")
                .desc("显示帮助信息")
                .required(false)
                .build();
                
        Option versionOption = Option.builder("v")
                .longOpt("version")
                .desc("显示版本信息")
                .required(false)
                .build();
        
        Option loginOption = Option.builder("l")
                .longOpt("login")
                .desc("登录并输入用户名和密码")
                .required(false)
                .build();
        
        Option logoutOption = Option.builder("o")
                .longOpt("logout")
                .desc("注销当前用户")
                .required(false)
                .build();
        
        options.addOption(nameOption);
        options.addOption(helpOption);
        options.addOption(versionOption);
        options.addOption(loginOption);
        options.addOption(logoutOption);
        
        // 创建命令行解析器
        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        
        try {
            // 解析命令行参数
            CommandLine cmd = parser.parse(options, args);
            
            if (cmd.hasOption("help")) {
                // 显示帮助信息
                formatter.printHelp("java -jar maven-hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar", options);
                return;
            }
            
            if (cmd.hasOption("version")) {
                // 显示版本信息
                System.out.println("Maven Hello World App - 版本 1.0");
                System.out.println("Java 版本: " + System.getProperty("java.version"));
                System.out.println("OS: " + System.getProperty("os.name") + " " + System.getProperty("os.version"));
                return;
            }
            
            // 优先处理注销请求
            if (cmd.hasOption("logout")) {
                try {
                    java.nio.file.Files.deleteIfExists(java.nio.file.Paths.get("session.txt"));
                    System.out.println("您已成功注销");
                    return; // 注销后直接退出程序
                } catch (IOException e) {
                    System.out.println("注销失败: " + e.getMessage());
                }
            }
            
            // 处理登录逻辑
            if (cmd.hasOption("login")) {
                // 读取用户名和密码
                System.out.print("请输入用户名: ");
                String username = System.console().readLine();
                System.out.print("请输入密码: ");
                String password = new String(System.console().readPassword());
                
                // 将用户状态写入会话文件
                try (PrintWriter out = new PrintWriter(new FileWriter("session.txt"))) {
                    out.println("用户已登录: " + username);
                } catch (IOException e) {
                    System.out.println("写入会话文件出错: " + e.getMessage());
                }
            }
            
            // 获取名字参数或使用默认值
            String name = cmd.getOptionValue("name", "世界");
            
            // 输出问候语
            System.out.println("你好, " + name + "!");
            System.out.println("Maven 和 Java 环境正常工作！");
            
        } catch (ParseException e) {
            System.out.println("解析命令行参数出错: " + e.getMessage());
            formatter.printHelp("java -jar maven-hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar", options);
        }
    }
}